package com.kerrykidz.scminvoicing.controller;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.kerrykidz.common.Constants;
import com.kerrykidz.common.PrimaryKeyGenerator;
import com.kerrykidz.common.PrimaryKeyGenerator.BusinessType;
import com.kerrykidz.common.service.ICommonService;
import com.kerrykidz.dao.model.SysAttFileEntity;
import com.kerrykidz.sales.service.IOrderService;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdCateEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdUnitEntity;
import com.kerrykidz.scminvoicing.service.IScmInvocingProductInfoService;
import com.kerrykidz.scminvoicing.service.IScmInvocingUnitInfoService;
import com.kerrykidz.system.dao.model.SysParaEntity;
import com.kerrykidz.system.util.UserUtil;
import com.kerrykidz.system.util.printReceipt.PrinterMessage;
import com.kerrykidz.system.vo.UserInfo;
import com.rdp.framework.core.controller.SpringSuperController;
import com.rdp.framework.exception.RDPException;

/**
 * 
 * @ClassName: ProductInfoController
 * @description: 商品信息
 * @author: ScreenJxp
 * @date: 2014年8月6日 上午11:31:49
 * @version: V1.0
 * 
 */
@Controller
@RequestMapping("scmInvocing/productInfo")
public class ProductInfoController extends SpringSuperController {
	// 商品以及分类
	@Autowired
	private IScmInvocingProductInfoService productService;
	// 商品单位
	@Autowired
	private IScmInvocingUnitInfoService unitService;
	// 公共service
	@Autowired
	private ICommonService commonService;
	@Autowired
	private IOrderService orderServiceImpl;
	/**
	 * @Title: forwardToProductInfo
	 * @Description: <p>
	 *               跳转到商品列表页面
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: ModelAndView
	 * @throws
	 * 
	 */
	@RequestMapping("/forwardToProductInfo")
	public ModelAndView forwardToProductInfo() throws RDPException {
		ModelAndView mav = new ModelAndView("invoicing/invo_commodity");
		return mav;
	}

	/**
	 * @throws RDPException
	 * 
	 * 
	 * @Title: findCategoryList
	 * @Description: <p>
	 *               查询活动分类用于加载商品的树控件
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: List<GblScmPrdCateEntity>
	 * @throws
	 * 
	 */
	@RequestMapping("/findCategoryList")
	@ResponseBody
	public List<GblScmPrdCateEntity> findCategoryList(GblScmPrdCateEntity entity) throws RDPException {
		entity.setDelFlag("0");
		//用于控制加载树的类型
		if("supply".equals(entity.getModiBy())){
			entity.setResverseTypes(new  String[]{"6","61"});
		}
		List<GblScmPrdCateEntity> resultList = productService.findCategoryList(entity);
		return resultList;
	}

	/**
	 * @throws RDPException
	 * 
	 * 
	 * @Title: findCategoryList
	 * @Description: <p>
	 *               查询活动分类用于加载商品的树控件
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月6日
	 * @return: List<GblScmPrdCateEntity>
	 * @throws
	 * 
	 */
	@RequestMapping("/findGoodsCategoryList")
	@ResponseBody
	public List<GblScmPrdCateEntity> findGoodsCategoryList() throws RDPException {
		GblScmPrdCateEntity entity = new GblScmPrdCateEntity();
		entity.setDelFlag("0");
		entity.setResverseTypes(new String[] { "6", "8", "61", "20", "9" });
		List<GblScmPrdCateEntity> resultList = productService.findCategoryList(entity);
		return resultList;
	}

	/**
	 * 
	 * 
	 * @Title: findProductList
	 * @Description: <p>
	 *               查询商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: GblScmPrdEntity
	 * @throws
	 * 
	 */
	@RequestMapping("/findProductList")
	@ResponseBody
	public GblScmPrdEntity findProductList(GblScmPrdEntity entity) throws RDPException {
		if (entity.getExcludeId() == null || entity.getExcludeId().size() == 0) {
			entity.setExcludeId(null);
		}
		entity.setIspaging(true);
		entity.setDelFlag("0");
			List<GblScmPrdCateEntity> cateList=productService.recurseCate(entity.getFkPrdcateId(), true, true);
			entity.setCateList(cateList);
		List<GblScmPrdEntity> resultList = productService.findProductList(entity);
		entity.setResults(resultList);
		return entity;
	}

	/**
	 * 
	 * 
	 * @Title: deleteProduct
	 * @Description: <p>
	 *               删除商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param map
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/deleteProduct")
	@ResponseBody
	public String deleteProduct(GblScmPrdEntity entity, HashMap<String, Object> map) throws RDPException {
		// 逻辑删除
		String userId = UserUtil.getUserFromSession().getUserId();
		map.put("pkPrdId", entity.getPkPrdId());
		map.put("idList", entity.getIdList());
		map.put("modiBy", userId);
		productService.deleteProduct(map);
		return "success";
	}

	/**
	 * 
	 * 
	 * @Title: updateProduct
	 * @Description: <p>
	 *               修改商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/updateProduct")
	@ResponseBody
	public String updateProduct(GblScmPrdEntity entity) throws RDPException {
		String userId = UserUtil.getUserFromSession().getUserId();
		entity.setModiBy(userId);
		//更改商品的图片路径
		String disDesc=entity.getDisDesc();
		if(disDesc!=null&&!"".equals(disDesc)){
				SysAttFileEntity fileEntity=new SysAttFileEntity();
				fileEntity.setPkAttfileId(entity.getFkPicFile());
				String filePath=entity.getDisDesc();
				String fileName=filePath.substring(filePath.lastIndexOf("\\")+1);
				fileEntity.setAttfilePath(filePath);
				fileEntity.setAttfileName(fileName);
				commonService.updateFilePath(fileEntity);
		}
		entity.setFkPicFile(null);
		productService.updateProduct(entity);
		return "success";
	}
  	/**
	 * 
	 * 
	 * @Title: addProduct
	 * @Description: <p>
	 *               添加商品信息
	 *               <p>
	 * 
	 * <pre>
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/addProduct")
	@ResponseBody
	public String addProduct(GblScmPrdEntity entity) throws RDPException {
		UserInfo userinfo = UserUtil.getUserFromSession();
		String userId = userinfo.getUserId();
		entity.setFkBranId(userinfo.getBranId());
		entity.setModiBy(userId);
		entity.setDelFlag("0");
		productService.addProduct(entity);
		return "success";
	}

	/**
	 * 
	 * 
	 * @Title: forwordAddProduct
	 * @Description: <p>
	 *               跳转到商品添加页面
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: ModelAndView
	 * @throws
	 * 
	 */
	@RequestMapping("/forwordAddProduct")
	public ModelAndView forwordAddProduct(GblScmPrdUnitEntity entity) throws RDPException {
		ModelAndView mav = new ModelAndView("invoicing/invo_addCommodity");
		String abbrCode = UserUtil.getUserFromSession().getAbbrCode();
		String pkPrdId = PrimaryKeyGenerator.getPrimaryKey(BusinessType.SP, abbrCode);
		List<GblScmPrdUnitEntity> unit = unitService.findUnitInfo(entity);
		mav.addObject("unit", unit);
		mav.addObject("pkPrdId", pkPrdId);
		mav.addObject("cateName", entity.getCateName());
		mav.addObject("fkPrdcateId", entity.getFkPrdcateId());
		mav.addObject("resverseType", entity.getResverseType());
		return mav;
	}

	/**
	 * 
	 * 
	 * @Title: deleteProductCate
	 * @Description: <p>
	 *               删除商品分类信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/deleteProductCate")
	@ResponseBody
	public String deleteProductCate(GblScmPrdCateEntity entity) throws RDPException {
		String userId = UserUtil.getUserFromSession().getUserId();
		entity.setDelFlag("1");
		entity.setModiBy(userId);
		productService.deleteProductCate(entity);
		return "success";
	}

	/**
	 * 
	 * 
	 * @Title: updateProductCate
	 * @Description: <p>
	 *               修改商品分类
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/updateProductCate")
	@ResponseBody
	public String updateProductCate(GblScmPrdCateEntity entity) throws RDPException {
		String userId = UserUtil.getUserFromSession().getUserId();
		entity.setDelFlag("0");
		entity.setModiBy(userId);
		productService.updateProductCate(entity);
		return "success";
	}

	/**
	 * 
	 * 
	 * @Title: addProductCate
	 * @Description: <p>
	 *               添加商品分类
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param entity
	 * @param: <p>
	 *         @param session
	 * @param: <p>
	 *         @return
	 * @param: <p>
	 *         @throws RDPException
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/addProductCate")
	@ResponseBody
	public String addProductCate(GblScmPrdCateEntity entity) throws RDPException {
		UserInfo user = UserUtil.getUserFromSession();
		String pkPrdcateId = PrimaryKeyGenerator.getPrimaryKey(BusinessType.SP, user.getAbbrCode());
		String userId = user.getUserId();
		entity.setPkPrdcateId(pkPrdcateId);
		entity.setDelFlag("0");
		entity.setModiBy(userId);
		entity.setDelFlag("0");
		productService.saveProductCate(entity);
		return "success";
	}

	/**
	 * 
	 * 
	 * @Title: uploadImage
	 * @Description: <p>
	 *               上传照片
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param file
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: String
	 * @throws
	 * 
	 */
	@RequestMapping("/uploadImage")
	@ResponseBody
	public String uploadImage(@RequestParam(value = "file", required = false) MultipartFile file) {
		UserInfo userInfo = UserUtil.getUserFromSession();
		if (null == userInfo) {
			return null;
		}
		SysParaEntity para = commonService.findSysParaById(Constants.SYS_BASE_PATH_IMAGE);
		String fileName = file.getOriginalFilename();
		int index = fileName.lastIndexOf(".");
		String newFileName = System.currentTimeMillis() + (index > -1 ? fileName.substring(index) : "");
		File targetFile = new File(para.getParaValue(), newFileName);
		String realName = targetFile.getPath();
		if (!targetFile.exists()) {
			targetFile.mkdirs();
		}
		// 保存
		try {
			file.transferTo(targetFile);
		} catch (Exception e) {
			e.printStackTrace();
			return "failure";
		}
		return realName;
	}

	/**
	 * 
	 * 
	 * @Title: getSelectProductList
	 * @Description: <p>
	 *               获取页面选中的商品信息
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月21日
	 * @return: List<GblScmPrdEntity>
	 * @throws
	 */
	@RequestMapping("/getSelectProductList")
	@ResponseBody
	public List<GblScmPrdEntity> getSelectProductList(GblScmPrdEntity entity) {
		List<GblScmPrdEntity> result = null;
		return result;
	}

	/**
	 * 
	 * 
	 * @Title: forwardToUpdatePage
	 * @Description: <p>
	 *               跳转到修改页面
	 *               <p>
	 * 
	 *               <pre>
	 * 			这里描述这个方法的使用方法 – 可选
	 * </pre>
	 * @param: <p>
	 *         @param pkPrdId
	 * @param: <p>
	 *         @return
	 *         <p>
	 * @date: 2014年8月25日
	 * @return: ModelAndView
	 * @throws
	 * 
	 */
	@RequestMapping("/forwardToUpdatePage")
	public ModelAndView forwardToUpdatePage(GblScmPrdEntity entity) {
		ModelAndView mav = new ModelAndView();
		if("2".equals(entity.getCateId1())){//查看商品信息
			mav.setViewName("invoicing/invo_readCommodity");
		}else{
			mav.setViewName("invoicing/invo_updateCommodity");
		}
		mav.addObject("entity", entity);
		return mav;
	}

	@RequestMapping("/findProductById")
	@ResponseBody
	public Map<String, Object> findProductById(GblScmPrdEntity entity) throws RDPException {
		entity = productService.findProductById(entity);
		List<GblScmPrdUnitEntity> unit = unitService.findUnitInfo(null);
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("entity", entity);
		map.put("unit", unit);
		return map;
	}
	/**
	 * 检查当前商品分类是否可以删除
	 * @param cateId
	 * @return
	 * @throws RDPException 
	 * @date: 2014年10月13日
	 */
	@RequestMapping("/deleteAbled")
	@ResponseBody
	public String   deleteAbled(@RequestParam("cateId")String cateId) throws RDPException{
		int isAbled=productService.deleteAbled(cateId);
		return  isAbled==0?"0":"1";
	}
	/**
	 * 判断是否可以删除或停用商品
	 * @param cateId
	 * @return
	 * @throws RDPException
	 * @date: 2014年10月13日
	 */
	@RequestMapping("/canAbled")
	@ResponseBody
	public String   canAbled(GblScmPrdEntity entity) throws RDPException{
		return  productService.canAbled(entity);
	}
	@RequestMapping("/testCab")
	public ModelAndView testCab(){
		ModelAndView mav=new ModelAndView("/invoicing/ScriptXCab");
		return  mav;
	}
	
	@RequestMapping("/getOrderDetail")
	@ResponseBody
	public List<PrinterMessage> getOrderDetail(String pkOrderId){
		List<PrinterMessage> list=orderServiceImpl.getInfo(pkOrderId);
		return list;
	}
}
